/**
 * 格式化相对时间
 * @param dateString 日期字符串
 * @returns 格式化后的相对时间
 */
export function formatRelativeTime(dateString: string): string {
  if (!dateString) return '';
  
  // 检查是否是简单时间格式 (HH:MM:SS)
  if (/^\d{2}:\d{2}:\d{2}$/.test(dateString)) {
    return dateString.substring(0, 5); // 只显示小时和分钟部分
  }
  
  try {
    const date = new Date(dateString);
    const now = new Date();
    const diff = now.getTime() - date.getTime();
    
    // 获取日期的年月日
    const year = date.getFullYear();
    const month = date.getMonth();
    const day = date.getDate();
    
    // 获取今天的年月日
    const nowYear = now.getFullYear();
    const nowMonth = now.getMonth();
    const nowDay = now.getDate();
    
    // 今天的消息，显示时间
    if (year === nowYear && month === nowMonth && day === nowDay) {
      return `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}`;
    }
    
    // 昨天的消息，显示"昨天"
    const yesterday = new Date(now);
    yesterday.setDate(nowDay - 1);
    if (year === yesterday.getFullYear() && month === yesterday.getMonth() && day === yesterday.getDate()) {
      return '昨天';
    }
    
    // 前天的消息，显示"前天"
    const beforeYesterday = new Date(now);
    beforeYesterday.setDate(nowDay - 2);
    if (year === beforeYesterday.getFullYear() && month === beforeYesterday.getMonth() && day === beforeYesterday.getDate()) {
      return '前天';
    }
    
    // 一周内的消息，显示周几
    if (diff < 7 * 24 * 60 * 60 * 1000) {
      const weekdays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
      return weekdays[date.getDay()];
    }
    
    // 今年的消息，显示月-日
    if (year === nowYear) {
      return `${month + 1}月${day}日`;
    }
    
    // 其他情况，显示年-月-日
    return `${year}/${month + 1}/${day}`;
  } catch (error) {
    console.error('时间格式解析错误:', error);
    return dateString; // 如果解析失败，返回原始字符串
  }
}

/**
 * 格式化日期时间
 * @param dateString 日期字符串
 * @returns 格式化后的日期时间
 */
export function formatDateTime(dateString: string): string {
  if (!dateString) return '';
  
  // 检查是否是简单时间格式 (HH:MM:SS)
  if (/^\d{2}:\d{2}:\d{2}$/.test(dateString)) {
    return dateString;
  }
  
  try {
    const date = new Date(dateString);
    const year = date.getFullYear();
    const month = (date.getMonth() + 1).toString().padStart(2, '0');
    const day = date.getDate().toString().padStart(2, '0');
    const hours = date.getHours().toString().padStart(2, '0');
    const minutes = date.getMinutes().toString().padStart(2, '0');
    
    return `${year}-${month}-${day} ${hours}:${minutes}`;
  } catch (error) {
    console.error('时间格式解析错误:', error);
    return dateString; // 如果解析失败，返回原始字符串
  }
}

/**
 * 格式化为友好的时间描述
 * @param dateString 日期字符串
 * @returns 友好的时间描述
 */
export function formatFriendlyTime(dateString: string): string {
  if (!dateString) return '';
  
  // 检查是否是简单时间格式 (HH:MM:SS)
  if (/^\d{2}:\d{2}:\d{2}$/.test(dateString)) {
    return '今天 ' + dateString.substring(0, 5); // 今天 HH:MM
  }
  
  try {
    const date = new Date(dateString);
    const now = new Date();
    const diff = now.getTime() - date.getTime(); // 时间差，单位为毫秒
    
    // 不到1分钟
    if (diff < 60 * 1000) {
      return '刚刚';
    }
    
    // 不到1小时
    if (diff < 60 * 60 * 1000) {
      return `${Math.floor(diff / (60 * 1000))}分钟前`;
    }
    
    // 不到1天
    if (diff < 24 * 60 * 60 * 1000) {
      return `${Math.floor(diff / (60 * 60 * 1000))}小时前`;
    }
    
    // 不到1周
    if (diff < 7 * 24 * 60 * 60 * 1000) {
      return `${Math.floor(diff / (24 * 60 * 60 * 1000))}天前`;
    }
    
    // 其他情况展示完整日期
    return formatDateTime(dateString);
  } catch (error) {
    console.error('时间格式解析错误:', error);
    return dateString; // 如果解析失败，返回原始字符串
  }
}
